"""
https://leetcode.com/problems/palindrome-number/description/

Функция divmod в Python принимает два числа и возвращает пару значений: результат целочисленного деления и остаток от деления.

Вот как это работает:

divmod(a, b) выполняет целочисленное деление a на b и возвращает два значения:
результат целочисленного деления a // b
остаток от деления a % b
Таким образом, вызов divmod(a, b) эквивалентен выполнению (a // b, a % b).

"""
class Solution:
    def is_palindrome(self, x: int) -> bool:
        #Если число отрицательное, оно не может быть палиндромом (например, -121 не равно 121-),
        # поэтому функция сразу возвращает False.
        if x < 0:
            return False

        new_number = 0  # используется для хранения перевернутого числа.
        original_number = x  # сохраняет исходное значение числа x для последующего сравнения.

        # Цикл продолжается, пока x не станет равным нулю.
        # divmod(x, 10) разделяет число x на целую часть и остаток от деления на 10.
        # Это позволяет получить последнюю цифру числа.
        # x обновляется до целой части (число без последней цифры).
        # d — это последняя цифра числа x.
        # new_number обновляется с добавлением новой цифры на новую позицию:
        # сначала умножается на 10, чтобы сдвинуть уже имеющиеся цифры влево, и добавляется новая цифра d.

        while x:
            x, d = divmod(x, 10)
            new_number = new_number * 10 + d
        return new_number == original_number


print(Solution().is_palindrome(121))   # True
print(Solution().is_palindrome(-121))   # False
print(Solution().is_palindrome(10))   # False
print(Solution().is_palindrome(12))   # False
print(Solution().is_palindrome(11))   # True
print(Solution().is_palindrome(1))   # True
